package utils

import (
	"context"
	"fmt"
	"github.com/chromedp/cdproto/page"
	"github.com/chromedp/chromedp"
	"os"
	"server/src/global"
	"time"
)

func Screenshot(urlstr string, x, y, width, height float64) {
	// 创建一个上下文
	ctx, cancel := chromedp.NewContext(context.Background())
	defer cancel()

	// 设置浏览器选项
	opts := append(chromedp.DefaultExecAllocatorOptions[:],
		chromedp.Flag("headless", true),
		chromedp.Flag("blink-settings", "imagesEnabled=true"),
		chromedp.Flag("disable-gpu", true),
		chromedp.Flag("no-sandbox", true),
		chromedp.Flag("disable-dev-shm-usage", true),
		chromedp.WindowSize(1920, 1080),
		chromedp.Flag("remote-debugging-port", "9221"),
	)
	allocCtx, cancel := chromedp.NewExecAllocator(ctx, opts...)
	defer cancel()

	// 创建一个浏览器实例
	ctx, cancel = chromedp.NewContext(allocCtx)
	defer cancel()

	// 导航到指定的URL
	var buf []byte
	err := chromedp.Run(ctx, chromedp.Navigate("http://103.214.173.91"), chromedp.Sleep(2*time.Second), chromedp.ActionFunc(func(ctx context.Context) error {
		// 获取页面截图
		var err error
		buf, err = page.CaptureScreenshot().WithQuality(100).WithClip(&page.Viewport{X: x, Y: y, Width: width, Height: height, Scale: 1}).Do(ctx)
		if err != nil {
			global.GVL_LOG.Error(err)
			fmt.Println("截图出现问题——————", err)
			return err
		}
		return nil
	}))
	if err != nil {
		global.GVL_LOG.Error(err)
	}
	// 将截图保存到文件
	err = os.WriteFile(urlstr, buf, 0777)
	if err != nil {
		global.GVL_LOG.Error(err)
	}
}
